﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

namespace Torpedo
{
    class Tabla
    {
        #region adattagok
            //ebben rajzoljuk a cellákat
            private System.Windows.Forms.DataGridView dgv;
            private int méret;
            private Panel iderajzoljad;
            private Főablak hivo;
            private string név;
            private int[,] cellak;
            
            //ebben vannak a táblára rakott hajók
            private List<Hajo> hajolist = new List<Hajo>();

        #endregion adattagok


        #region konstruktor,destruktor
        //Tábla konstruktor
            public Tabla(string név, int méret, Panel iderajzoljad, Főablak hivo)
            {
                this.hivo = hivo;
                dgv = new System.Windows.Forms.DataGridView();
                dgv.RowCount = méret;
                dgv.ColumnCount = méret;
                this.név = név;
                this.méret = méret;
                this.iderajzoljad = iderajzoljad;
                Console.WriteLine("tábla objektum létrehozva: méret: {0}", this.méret);

                dgv.Dock = DockStyle.Fill;
                dgv.AllowDrop = true;

                dgv.DragOver += new DragEventHandler(dgv_DragOver);
                dgv.DragDrop += new DragEventHandler(dgv_DragDrop);
                iderajzoljad.Controls.Add(dgv);
                cellak = new int[méret, méret];
                for (int i = 0; i < méret; i++)
                {
                    dgv.Columns[i].Width = 20;
                    for (int ii = 0; ii < méret; ii++)
                    {
                        cellak[i, ii] = 0;
                    }
                }
                
            }

            //Tábla destruktor
            ~Tabla()
            {

            }


        #endregion konstruktor,destruktor


        #region metódusok
            private void tablareset()
            {
                for (int i = 0; i < méret; i++)
                {
                    for (int ii = 0; ii < méret; ii++)
                    {
                        cellak[i, ii] = 0;
                    }
                }
            }

            private void hajokszamolas()
            {
                foreach (Hajo hajo in hajolist)
                {
                    for (int i = 0; i < hajo.getsor(); i++)
                    {
                        for (int ii = 0; ii < hajo.getoszlop(); ii++)
                        {
                            if (hajo.getcellak()[i, ii] == 1)
                                cellak[hajo.getsorkoordináta() + i, hajo.getoszlopkoordináta() + ii]++;
                        }
                    }
                }
            }
 
            private void tablarajz()
            {
                for (int i = 0; i < méret; i++)
                {
                    for (int ii = 0; ii < méret; ii++)
                    {
                        if (cellak[i, ii] == 0)
                            dgv.Rows[i].Cells[ii].Style.BackColor = Color.White;
                        if (cellak[i, ii] == 1)
                            dgv.Rows[i].Cells[ii].Style.BackColor = Color.Gray;
                        if (cellak[i, ii] == 2)
                            dgv.Rows[i].Cells[ii].Style.BackColor = Color.Green;
                    }
                }
            }

            private void dgv_DragOver(object sender, DragEventArgs e)
            {
                e.Effect = DragDropEffects.Move;
                tablareset();
                Point p = dgv.PointToClient(new Point(e.X, e.Y));
                DataGridView.HitTestInfo hit = dgv.HitTest(p.X, p.Y);

                if (hit.Type == DataGridViewHitTestType.Cell)
                {

                    Hajo item = (Hajo)e.Data.GetData(typeof(Hajo));
                    for (int i = 0; i < item.getsor(); i++)
                    {
                        for (int ii = 0; ii < item.getoszlop(); ii++)
                        {
                            if (item.getcellak()[i, ii] == 1)
                                if ((hit.RowIndex + i < méret) && (hit.RowIndex + i > -1))
                                    if ((hit.ColumnIndex + ii < méret) && (hit.ColumnIndex + ii > -1))
                                        cellak[hit.RowIndex + i, hit.ColumnIndex + ii]++;
                        }
                    }
                }

                hajokszamolas();
                tablarajz();
            }
            private void dgv_DragDrop(object sender, DragEventArgs e)
            {
                Point p = dgv.PointToClient(new Point(e.X, e.Y));
                DataGridView.HitTestInfo hit = dgv.HitTest(p.X, p.Y);
                tablareset();

                if (hit.Type == DataGridViewHitTestType.Cell)
                {
                    
                    Hajo item = (Hajo)e.Data.GetData(typeof(Hajo));
                    
                    item.setsorkoordináta(hit.RowIndex);
                    item.setoszlopkoordináta(hit.ColumnIndex);
                    hajolist.Add(item);
                    hivo.hajotorles();
                    hajokszamolas();
                    tablarajz();
                }

                

                
            }
        #endregion metódusok
    }
}
